package com.example.learningnote.basic;
import android.util.Log;

import java.util.HashMap;
import java.util.Map;
import java.util.Date;


// Java的数据类型
//   - 基本数据类型
//    - 数值型
//        - 整数类型 (byte、 short、int、long)
//        - 浮点类型 (float、double)
//    - 字符型 (char)
//    - 布尔型 (boolean)
//  - 引用数据类型
//    - 类 class
//    - 接口 interface
//    - 数组

// Java 集合框架
//  - Collection 类的对象   List(序列) Queue(队列) Set(集)
//  - Map 键值对

// Java 异常
//  Throwable 是 java异常的根类 下有两个子类 Error Exception
//      - Error 是程序无法处理的错误，表示运行应用程序中的严重问题 常见错误有 虚拟机错误 VirtualMachineError 内存溢出 OutOfMemoryError 线程死锁 ThreadDeath
//      - Exception 是程序本身可以处理的错误
//  异常处理  try catch finally throw throws
//      - try 执行可能出现错误的代码
//      - catch 捕获异常
//      - finally 无论是否异常，都能执行代码
//      - throws 声明可能要抛出的异常
//      - throw 手动抛出异常



public class LearnDataType {
    public static void main(){
        Log.d("LearnDataType", "进入LearnDataType 类 执行 main方法");

        // 整数类型 (int)  八进制 0开头  十六进制0x / 0X 开头
        int age = 25;
        Log.d("LearnDataType", "数据类型 int: " + age);

        // 浮点数类型 (double)
        double pi = 3.14159;
        Log.d("LearnDataType", "数据类型 double: " + pi);

        // 字符串类型 (String)
        String str = "我是 String 类型";
        Log.d("LearnDataType", "数据类型 String: " + str);

        // 布尔类型 (boolean)
        boolean isActive = true;
        Log.d("LearnDataType", "数据类型 boolean: " + isActive);

        // 字符类型 (char)
        char initial = 'A';
        Log.d("LearnDataType", "数据类型 char: " + initial);

        // 数组类型 (Array)
        int[] numbers = {1, 2, 3, 4};
        for (int num : numbers) {
            Log.d("LearnDataType", "数据类型 numbers: " + num);
        }

        // 对象类型 (Object)
        Object obj = new Object();
        Log.d("LearnDataType", "数据类型 Object: " + obj.getClass().getName());

        // 使用Map (Map)
        Map<String, String> map = new HashMap<>();
        map.put("name", "张三");
        map.put("city", "北京");
        map.put("job", "工程师");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            Log.d("LearnDataType", "数据类型 Map: " + entry.getKey() + " -> " + entry.getValue());
        }

        // 日期时间类型 (Date)
        Date currentDate = new Date();
        Log.d("LearnDataType", "数据类型 Date: " + currentDate);

        // 长整型 (long)
        long distance = 150000L;
        Log.d("LearnDataType", "数据类型 long: " + distance);

        // 浮点数 (float)
        float temperature = 36.6f;
        Log.d("LearnDataType", "数据类型 float: " + temperature);

        // 字符串数组 (String Array)
        String[] fruits = {"Apple", "Banana", "Orange"};
        for (String fruit : fruits) {
            Log.d("LearnDataType", "数据类型 String Array: " + fruit);
        }
        Log.d("LearnDataType", "数组长度: " + fruits.length);

        // 自动装箱与拆箱（Integer）
        Integer integerNumber = 100;  // 自动装箱
        int primitiveInt = integerNumber; // 自动拆箱
        Log.d("LearnDataType", "数据类型 Integer: " + integerNumber + ", 自动拆箱后的 int: " + primitiveInt);

        // 抽象类不允许实例化
        // Person p1 = new Person("hh" , 14 , "男");
        // Person p2 = new Person("gg" , 16 , "男");
        // Log.d("LearnDataType" , "hh信息"+ p1);
        // Log.d("LearnDataType" ,  "gg信息"+ p2);
        Log.d("LearnDataType" ,  Person.play("hh"));

        Student s1 = new Student("miaowing" , 18 , "男" , "English");
        Log.d("OOP" , s1.eat());
        Log.d("OOP" , s1.show());
        Teacher t1 = new Teacher("qq" , 28 , "男" , "数学");
        Log.d("OOP" , t1.run());

        SingletonEver se1 = SingletonEver.getInstance();
        SingletonEver se2 = SingletonEver.getInstance();
        Log.d("Singleton" , "se1"+ se1);
        Log.d("Singleton" , "se2" + se2);
        SingletonWant sw1 = SingletonWant.getInstance();
        SingletonWant sw2 = SingletonWant.getInstance();
        Log.d("Singleton" , "sw1"+ sw1);
        Log.d("Singleton" , "sw2" + sw2);

        FirstPhone fp = new FirstPhone();
        SecondPhone sp = new SecondPhone();
        Log.d("interface" ,  fp.call() + sp.photo() + sp.call());
        Camera c = new Camera();
        Log.d("interface" , c.photo());


    }
}

